package com.guomao.topic;

import com.guomao.util.ConnectionUtil;
import com.rabbitmq.client.*;

import java.io.IOException;  
  
/**
 * 消费者示例类，用于从RabbitMQ队列中消费消息
 * 使用Topic交换机模式，实现消息的接收与处理
 */
public class Consumer1 {
  
    /**
     * 程序入口方法
     * @param args 命令行参数
     * @throws Exception 可能抛出的异常
     */
    public static void main(String[] args) throws Exception {
  
        // 建立与RabbitMQ的连接
        Connection connection = ConnectionUtil.getConnection();
  
        // 创建频道，用于消息的收发
        Channel channel = connection.createChannel();
  
        // 定义队列名称
        String QUEUE_NAME = "test_topic_queue1";
  
        // 声明队列，参数分别为：队列名称、是否持久化、是否独占、是否自动删除、其他参数
        channel.queueDeclare(QUEUE_NAME,true,false,false,null);
  
        // 创建消费者，重写handleDelivery方法处理接收到的消息
        Consumer consumer = new DefaultConsumer(channel){
  
            /**
             * 重写消息处理方法
             * @param consumerTag 消费者标签
             * @param envelope 包含消息的基本属性，如路由键、交换机等
             * @param properties 消息的属性
             * @param body 消息内容
             * @throws IOException 可能抛出的IO异常
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {  
  
                // 将消息体转换为字符串并打印
                System.out.println("body："+new String(body));
  
            }  
  
        };  
  
        // 开始消费队列中的消息，参数分别为：队列名称、是否自动确认、消费者
        channel.basicConsume(QUEUE_NAME,true,consumer);
  
    }  
  
}